package com.huitong.common.satoken.utils;

import cn.dev33.satoken.stp.StpUtil;
import com.huitong.common.satoken.domain.vo.LoginVO;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;

/**
 * 登录工具类
 *
 * @author fromdrowning
 * @date 2024/3/17 8:51
 */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class LoginUtils {

    /**
     * 登录用户角色key
     */
    public static final String ROLE_KEY = "role";

    /**
     * 存储用户登录信息并生成token
     *
     * @param loginVO 登录信息视图对象
     */
    public static void login(LoginVO loginVO) {
        // 在Satoken中登录并生成token同时存储登录用户的角色信息在Satoken的Session中
        StpUtil.login(loginVO.getId());
        loginVO.setToken(StpUtil.getTokenValue());
        StpUtil.getSession().set(ROLE_KEY, loginVO.getRole());
    }

    /**
     * 获取到当前登录用户的学号
     *
     * @return 当前登录用户的学号
     */
    public static Long getLoginUserId() {
        return StpUtil.getLoginIdAsLong();
    }

    /**
     * 获取到当前登录用户的角色
     *
     * @return 当前登录用户的角色
     */
    public static String getLoginUserRole() {
        return (String) StpUtil.getSession().get(ROLE_KEY);
    }

    /**
     * 退出登录
     */
    public static void logout() {
        StpUtil.logout();
    }
}
